/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef __BROADCAST_MODULE_H__
#define __BROADCAST_MODULE_H__
#include "core/module.h"
#include "core/sockness.h"
#include "core/context.h"

namespace mod {
	// 广播模块，用于服务网关之间的广播通信
	class BreadcastModule final : public Module {
	public:
		explicit BreadcastModule(std::shared_ptr<Context> ctx, const std::string &module_name);
		~BreadcastModule() override;
		BreadcastModule(const BreadcastModule &)            = delete;
		BreadcastModule &operator=(const BreadcastModule &) = delete;
		BreadcastModule(BreadcastModule &&)                 = delete;
		BreadcastModule &operator=(BreadcastModule &&)      = delete;

		bool Init() override;
		void Start() override;
		void Stop() override;

	private:
		int            sockfd = -1;       // 广播Socket，应用级生命周期
		void           summon_sender();   // 召唤其他服务网关,召唤流程： (c)PSH -> (s)ACK -> (s)REP -> (c)FIN
		listen_handler summon_receiver(); // 监听其他服务网关的召唤
	}; // class BroadcastModule
} // namespace mod
#endif // __BROADCAST_MODULE_H__
